{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fully Connected Feed-Forward Network\n",
    "\n",
    "In this notebook we will play with Feed-Forward FC-NN (Fully Connected Neural Network) for a *classification task*: \n",
    "\n",
    "Image Classification on MNIST Dataset\n",
    "\n",
    "**RECALL**\n",
    "\n",
    "In the FC-NN, the output of each layer is computed using the activations from the previous one, as follows:\n",
    "\n",
    "$$h_{i} = \\sigma(W_i h_{i-1} + b_i)$$\n",
    "\n",
    "where ${h}_i$ is the activation vector from the $i$-th layer (or the input data for $i=0$), ${W}_i$ and ${b}_i$ are  the weight matrix and the bias vector for the $i$-th layer, respectively. \n",
    "<br><rb>\n",
    "$\\sigma(\\cdot)$ is the activation function. In our example, we will use the *ReLU* activation function for the hidden layers and *softmax* for the last layer.\n",
    "\n",
    "To regularize the model, we will also insert a Dropout layer between consecutive hidden layers. \n",
    "\n",
    "Dropout works by “dropping out” some unit activations in a given layer, that is setting them to zero with a given probability.\n",
    "\n",
    "Our loss function will be the **categorical crossentropy**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model definition\n",
    "Keras supports two different kind of models: the [Sequential](http://keras.io/models/#sequential) model and the [Graph](http://keras.io/models/#graph) model. The former is used to build linear stacks of layer (so each layer has one input and one output), and the latter supports any kind of connection graph.\n",
    "\n",
    "In our case we build a Sequential model with three [Dense](http://keras.io/layers/core/#dense) (aka fully connected) layers, with some [Dropout](http://keras.io/layers/core/#dropout). Notice that the output layer has the softmax activation function. \n",
    "\n",
    "The resulting model is actually a `function` of its own inputs implemented using the Keras backend. \n",
    "\n",
    "We apply the binary crossentropy loss and choose SGD as the optimizer. \n",
    "\n",
    "Please remind that Keras supports a variety of different [optimizers](http://keras.io/optimizers/) and [loss functions](http://keras.io/objectives/), which you may want to check out. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introducing ReLU"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The **ReLu** function is defined as $f(x) = \\max(0, x),$ [1]\n",
    "\n",
    "A smooth approximation to the rectifier is the *analytic function*: $f(x) = \\ln(1 + e^x)$\n",
    "\n",
    "which is called the **softplus** function.\n",
    "\n",
    "The derivative of softplus is $f'(x) = e^x / (e^x + 1) = 1 / (1 + e^{-x})$, i.e. the **logistic function**.\n",
    "\n",
    "[1] [http://www.cs.toronto.edu/~fritz/absps/reluICML.pdf]() by G. E. Hinton "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Note: Keep in mind this function as it is heavily used in CNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers.core import Dense\n",
    "from keras.optimizers import SGD\n",
    "\n",
    "nb_classes = 10\n",
    "\n",
    "# FC@512+relu -> FC@512+relu -> FC@nb_classes+softmax\n",
    "# ... your Code Here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# %load ../solutions/sol_321.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers.core import Dense\n",
    "from keras.optimizers import SGD\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Dense(512, activation='relu', input_shape=(784,)))\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dense(10, activation='softmax'))\n",
    "\n",
    "model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.001), \n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data preparation (`keras.dataset`)\n",
    "\n",
    "We will train our model on the MNIST dataset, which consists of 60,000 28x28 grayscale images of the 10 digits, along with a test set of 10,000 images. \n",
    "\n",
    "![](../imgs/mnist.png)\n",
    "\n",
    "Since this dataset is **provided** with Keras, we just ask the `keras.dataset` model for training and test data.\n",
    "\n",
    "We will:\n",
    "\n",
    "* download the data\n",
    "* reshape data to be in vectorial form (original data are images)\n",
    "* normalize between 0 and 1.\n",
    "\n",
    "The `binary_crossentropy` loss expects a **one-hot-vector** as input, therefore we apply the `to_categorical` function from `keras.utilis` to convert integer labels to **one-hot-vectors**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.utils import np_utils\n",
    "\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000, 28, 28)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train = X_train.reshape(60000, 784)\n",
    "X_test = X_test.reshape(10000, 784)\n",
    "X_train = X_train.astype(\"float32\")\n",
    "X_test = X_test.astype(\"float32\")\n",
    "\n",
    "# Put everything on grayscale\n",
    "X_train /= 255\n",
    "X_test /= 255\n",
    "\n",
    "# convert class vectors to binary class matrices\n",
    "Y_train = np_utils.to_categorical(y_train, 10)\n",
    "Y_test = np_utils.to_categorical(y_test, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Split Training and Validation Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(784,)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7f8cea6438>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7f9047ccf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(X_train[0].reshape(28, 28))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7 8 9]\n",
      "[0 0 0 0 0 1 0 0 0 0]\n"
     ]
    }
   ],
   "source": [
    "print(np.asarray(range(10)))\n",
    "print(Y_train[0].astype('int'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7f8ce4f9b0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n/EBQhB8I6v8iFjUYtO9dHgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7f91a777f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(X_val[0].reshape(28, 28))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7 8 9]\n",
      "[0 0 0 0 1 0 0 0 0 0]\n"
     ]
    }
   ],
   "source": [
    "print(np.asarray(range(10)))\n",
    "print(Y_val[0].astype('int'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training\n",
    "Having defined and compiled the model, it can be trained using the `fit` function. We also specify a validation dataset to monitor validation loss and accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 45000 samples, validate on 15000 samples\n",
      "Epoch 1/2\n",
      "45000/45000 [==============================] - 1s - loss: 2.1743 - acc: 0.2946 - val_loss: 2.0402 - val_acc: 0.5123\n",
      "Epoch 2/2\n",
      "45000/45000 [==============================] - 1s - loss: 1.9111 - acc: 0.6254 - val_loss: 1.7829 - val_acc: 0.6876\n"
     ]
    }
   ],
   "source": [
    "network_history = model.fit(X_train, Y_train, batch_size=128, \n",
    "                            epochs=2, verbose=1, validation_data=(X_val, Y_val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plotting Network Performance Trend\n",
    "The return value of the `fit` function is a `keras.callbacks.History` object which contains the entire history of training/validation loss and accuracy, for each epoch. We can therefore plot the behaviour of loss and accuracy during the training phase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/w/rMOoQeiTo9AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f54da0240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nrhgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f0af187f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "def plot_history(network_history):\n",
    "    plt.figure()\n",
    "    plt.xlabel('Epochs')\n",
    "    plt.ylabel('Loss')\n",
    "    plt.plot(network_history.history['loss'])\n",
    "    plt.plot(network_history.history['val_loss'])\n",
    "    plt.legend(['Training', 'Validation'])\n",
    "\n",
    "    plt.figure()\n",
    "    plt.xlabel('Epochs')\n",
    "    plt.ylabel('Accuracy')\n",
    "    plt.plot(network_history.history['acc'])\n",
    "    plt.plot(network_history.history['val_acc'])\n",
    "    plt.legend(['Training', 'Validation'], loc='lower right')\n",
    "    plt.show()\n",
    "\n",
    "plot_history(network_history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After `2` epochs, we get a `~88%` validation accuracy. \n",
    "\n",
    "* If you increase the number of epochs, you will get definitely better results."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Quick Exercise: \n",
    "\n",
    "Try increasing the number of epochs (if you're hardware allows to)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 45000 samples, validate on 15000 samples\n",
      "Epoch 1/2\n",
      "45000/45000 [==============================] - 2s - loss: 0.8966 - acc: 0.8258 - val_loss: 0.8463 - val_acc: 0.8299\n",
      "Epoch 2/2\n",
      "45000/45000 [==============================] - 1s - loss: 0.8005 - acc: 0.8370 - val_loss: 0.7634 - val_acc: 0.8382\n"
     ]
    }
   ],
   "source": [
    "# Your code here\n",
    "model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.001), \n",
    "              metrics=['accuracy'])\n",
    "network_history = model.fit(X_train, Y_train, batch_size=128, \n",
    "                            epochs=2, verbose=1, validation_data=(X_val, Y_val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introducing the Dropout Layer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The **dropout layers** have the very specific function to *drop out* a random set of activations in that layers by setting them to zero in the forward pass. Simple as that. \n",
    "\n",
    "It allows to avoid *overfitting* but has to be used **only** at training time and **not** at test time. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```python\n",
    "\n",
    "keras.layers.core.Dropout(rate, noise_shape=None, seed=None)\n",
    "```\n",
    "\n",
    "Applies Dropout to the input.\n",
    "\n",
    "Dropout consists in randomly setting a fraction rate of input units to 0 at each update during training time, which helps prevent overfitting.\n",
    "\n",
    "Arguments\n",
    "\n",
    "* rate: float between 0 and 1. Fraction of the input units to drop.\n",
    "* noise_shape: 1D integer tensor representing the shape of the binary dropout mask that will be multiplied with the input. For instance, if your inputs have shape  (batch_size, timesteps, features) and you want the dropout mask to be the same for all timesteps, you can use noise_shape=(batch_size, 1, features).\n",
    "* seed: A Python integer to use as random seed."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note** Keras guarantess automatically that this layer is **not** used in **Inference** (i.e. Prediction) phase\n",
    "(thus only used in **training** as it should be!)\n",
    "\n",
    "See `keras.backend.in_train_phase` function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.layers.core import Dropout\n",
    "\n",
    "## Pls note **where** the `K.in_train_phase` is actually called!!\n",
    "Dropout??"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras import backend as K\n",
    "\n",
    "K.in_train_phase?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise:\n",
    "\n",
    "Try modifying the previous example network adding a Dropout layer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.layers.core import Dropout\n",
    "\n",
    "# FC@512+relu -> DropOut(0.2) -> FC@512+relu -> DropOut(0.2) -> FC@nb_classes+softmax\n",
    "# ... your Code Here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# %load ../solutions/sol_312.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 45000 samples, validate on 15000 samples\n",
      "Epoch 1/4\n",
      "45000/45000 [==============================] - 2s - loss: 1.3746 - acc: 0.6348 - val_loss: 0.6917 - val_acc: 0.8418\n",
      "Epoch 2/4\n",
      "45000/45000 [==============================] - 2s - loss: 0.6235 - acc: 0.8268 - val_loss: 0.4541 - val_acc: 0.8795\n",
      "Epoch 3/4\n",
      "45000/45000 [==============================] - 1s - loss: 0.4827 - acc: 0.8607 - val_loss: 0.3795 - val_acc: 0.8974\n",
      "Epoch 4/4\n",
      "45000/45000 [==============================] - 1s - loss: 0.4218 - acc: 0.8781 - val_loss: 0.3402 - val_acc: 0.9055\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VdW9//H3N3PIPDEPASJDmAIERHCAaq3aOqAocLWt\ntpaftlqpnehw63Bra++1ilNrrVdtb1txxGoVO2nrAMggYUYJk4Y5gYQhhEzr98c+OQZISCA52TnJ\n5/U85+EM+5zz3dmaT9Zee61lzjlEREQAIvwuQERE2g+FgoiIBCkUREQkSKEgIiJBCgUREQlSKIiI\nSJBCQUREghQKIiISpFAQEZGgKL8LOFWZmZkuOzvb7zJERMLK8uXLi51zWU1tF3ahkJ2dzbJly/wu\nQ0QkrJjZtuZsF7LTR2b2pJntMbM1TWw3zsyqzWxaqGoREZHmCWWfwtPARSfbwMwigV8AfwthHSIi\n0kwhCwXn3NvAviY2uxV4EdgTqjpERKT5fOtTMLNewFRgCjCuiW1nAbMA+vbtG/riRKRNVFVVUVRU\nREVFhd+ldBhxcXH07t2b6Ojo03q/nx3Nc4HvO+dqzeykGzrnHgceB8jPz9cCECIdRFFREUlJSWRn\nZ9PU7wFpmnOOkpISioqK6N+//2l9hp+hkA/MC/yHkAlcYmbVzrmXfaxJRNpQRUWFAqEVmRkZGRns\n3bv3tD/Dt1BwzgVjzMyeBv6iQBDpfBQIraulP89QXpL6DLAIGGxmRWb2VTO7ycxuCtV3nsyusgru\nenUtVTW1fny9iEhYCFlLwTk38xS2vT5UddQp+GQ/T723lYSYKL7zucGh/joRCQMlJSWcf/75AOza\ntYvIyEiysrxBv0uWLCEmJqbJz7jhhhuYM2cOgwc3/nvl0UcfJTU1lWuvvbZ1Cg+hsBvRfLouGt6D\nq8f25lf/KuS8wVmMy073uyQR8VlGRgYFBQUA3HnnnSQmJvKd73znmG2cczjniIho+MTKU0891eT3\nfOMb32h5sW2kU02Id8dlw+iT3oXZ8wo4UFHldzki0k4VFhaSm5vLtddey7Bhw9i5cyezZs0iPz+f\nYcOGcffddwe3PfvssykoKKC6uprU1FTmzJnDqFGjOOuss9izxxuC9eMf/5i5c+cGt58zZw7jx49n\n8ODBLFy4EIDDhw9z1VVXkZuby7Rp08jPzw8GVlvqNC0FgMTYKB6YnsfVjy3ijj+v5YHpeX6XJCIB\nd726lnU7DrTqZ+b2TOaOS4ed1ns3bNjA73//e/Lz8wG49957SU9Pp7q6milTpjBt2jRyc3OPeU9Z\nWRnnnXce9957L7fffjtPPvkkc+bMOeGznXMsWbKEV155hbvvvps33niDhx9+mO7du/Piiy+ycuVK\nxowZc1p1t1SnaikAjOmbxq2fyWH+iu28snKH3+WISDs1cODAYCAAPPPMM4wZM4YxY8awfv161q1b\nd8J74uPjufjiiwEYO3YsW7dubfCzr7zyyhO2effdd5kxYwYAo0aNYtiw0wuzlupULYU6t0zJ4e2P\n9vKj+asZ2y+NXqnxfpck0umd7l/0oZKQkBC8v3HjRh588EGWLFlCamoq1113XYOjsOt3TEdGRlJd\nXd3gZ8fGxja5jV86XUsBICoygrnTR1Nb67j92QJqajVIWkQad+DAAZKSkkhOTmbnzp389a9/bfXv\nmDRpEs899xwAq1evbrAl0hY6ZSgA9M3owp2XDeP9Lft4/O3NfpcjIu3YmDFjyM3NZciQIXzpS19i\n0qRJrf4dt956K9u3byc3N5e77rqL3NxcUlJSWv17mmLOhddfyfn5+a61FtlxzvGNP33A39ftZv7X\nJzG8V9sfAJHObP369QwdOtTvMtqF6upqqquriYuLY+PGjVx44YVs3LiRqKhTP8vf0M/VzJY75/Ib\neUtQp+xTqGNm/GzqCD7YVso3563gtVvPIT4m0u+yRKQTOnToEOeffz7V1dU45/jNb35zWoHQUp06\nFABSu8Twy2tGce0T73PP6+v46RUj/C5JRDqh1NRUli9f7ncZnbdPob5JOZl87Zz+/GHxx/xz/W6/\nyxER8Y1CIeA7nxvM0B7JfO+FVew9eNTvckREfKFQCIiNiuTBGXkcOlrN915YSbh1wIuItAaFQj2D\nuiXxg4uH8NaHe/nD4m1+lyMi0uYUCsf58sRszhuUxU9fW0/hnoN+lyMiITRlypQTBqLNnTuXm2++\nudH3JCYmArBjxw6mTZvW4DaTJ0+mqUvn586dS3l5efDxJZdcQmlpaXNLDxmFwnHMjP+5eiQJsVHc\nNq+AymotyiPSUc2cOZN58+Yd89y8efOYObPp5WB69uzJCy+8cNrffXwovP7666Smpp7257UWhUID\nuibFce+VI1i74wC//PuHfpcjIiEybdo0XnvtNSorKwHYunUrO3bsYPTo0Zx//vmMGTOGESNG8Oc/\n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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f127a37f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8efc155eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "network_history = model.fit(X_train, Y_train, batch_size=128, \n",
    "                            epochs=4, verbose=1, validation_data=(X_val, Y_val))\n",
    "plot_history(network_history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* If you continue training, at some point the validation loss will start to increase: that is when the model starts to **overfit**. \n",
    "\n",
    "It is always necessary to monitor training and validation loss during the training of any kind of Neural Network, either to detect overfitting or to evaluate the behaviour of the model **(any clue on how to do it??)**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# %load solutions/sol23.py\n",
    "from keras.callbacks import EarlyStopping\n",
    "\n",
    "early_stop = EarlyStopping(monitor='val_loss', patience=4, verbose=1)\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Dense(512, activation='relu', input_shape=(784,)))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(10, activation='softmax'))\n",
    "\n",
    "model.compile(loss='categorical_crossentropy', optimizer=SGD(), \n",
    "              metrics=['accuracy'])\n",
    "    \n",
    "model.fit(X_train, Y_train, validation_data = (X_test, Y_test), epochs=100, \n",
    "          batch_size=128, verbose=True, callbacks=[early_stop]) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Inspecting Layers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_4 (Dense)              (None, 512)               401920    \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 512)               262656    \n",
      "_________________________________________________________________\n",
      "dropout_2 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 10)                5130      \n",
      "=================================================================\n",
      "Total params: 669,706\n",
      "Trainable params: 669,706\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# We already used `summary`\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `model.layers` is iterable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model Input Tensors:  Tensor(\"dense_4_input:0\", shape=(?, 784), dtype=float32)\n",
      "\n",
      "Layers - Network Configuration:\n",
      "\n",
      "dense_4 True\n",
      "Layer Configuration:\n",
      "{'batch_input_shape': (None, 784), 'name': 'dense_4', 'units': 512, 'bias_regularizer': None, 'bias_initializer': {'config': {}, 'class_name': 'Zeros'}, 'trainable': True, 'activation': 'relu', 'use_bias': True, 'bias_constraint': None, 'activity_regularizer': None, 'kernel_regularizer': None, 'kernel_constraint': None, 'kernel_initializer': {'config': {'seed': None, 'mode': 'fan_avg', 'scale': 1.0, 'distribution': 'uniform'}, 'class_name': 'VarianceScaling'}, 'dtype': 'float32'}\n",
      "----------------------------------------\n",
      "dropout_1 True\n",
      "Layer Configuration:\n",
      "{'name': 'dropout_1', 'rate': 0.2, 'trainable': True}\n",
      "----------------------------------------\n",
      "dense_5 True\n",
      "Layer Configuration:\n",
      "{'kernel_regularizer': None, 'units': 512, 'bias_regularizer': None, 'bias_initializer': {'config': {}, 'class_name': 'Zeros'}, 'trainable': True, 'activation': 'relu', 'bias_constraint': None, 'activity_regularizer': None, 'name': 'dense_5', 'kernel_constraint': None, 'kernel_initializer': {'config': {'seed': None, 'mode': 'fan_avg', 'scale': 1.0, 'distribution': 'uniform'}, 'class_name': 'VarianceScaling'}, 'use_bias': True}\n",
      "----------------------------------------\n",
      "dropout_2 True\n",
      "Layer Configuration:\n",
      "{'name': 'dropout_2', 'rate': 0.2, 'trainable': True}\n",
      "----------------------------------------\n",
      "dense_6 True\n",
      "Layer Configuration:\n",
      "{'kernel_regularizer': None, 'units': 10, 'bias_regularizer': None, 'bias_initializer': {'config': {}, 'class_name': 'Zeros'}, 'trainable': True, 'activation': 'softmax', 'bias_constraint': None, 'activity_regularizer': None, 'name': 'dense_6', 'kernel_constraint': None, 'kernel_initializer': {'config': {'seed': None, 'mode': 'fan_avg', 'scale': 1.0, 'distribution': 'uniform'}, 'class_name': 'VarianceScaling'}, 'use_bias': True}\n",
      "----------------------------------------\n",
      "Model Output Tensors:  Tensor(\"dense_6/Softmax:0\", shape=(?, 10), dtype=float32)\n"
     ]
    }
   ],
   "source": [
    "print('Model Input Tensors: ', model.input, end='\\n\\n')\n",
    "print('Layers - Network Configuration:', end='\\n\\n')\n",
    "for layer in model.layers:\n",
    "    print(layer.name, layer.trainable)\n",
    "    print('Layer Configuration:')\n",
    "    print(layer.get_config(), end='\\n{}\\n'.format('----'*10))\n",
    "print('Model Output Tensors: ', model.output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extract hidden layer representation of the given data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One **simple** way to do it is to use the weights of your model to build a new model that's truncated at the layer you want to read. \n",
    "\n",
    "Then you can run the `._predict(X_batch)` method to get the activations for a batch of inputs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model_truncated = Sequential()\n",
    "model_truncated.add(Dense(512, activation='relu', input_shape=(784,)))\n",
    "model_truncated.add(Dropout(0.2))\n",
    "model_truncated.add(Dense(512, activation='relu'))\n",
    "\n",
    "for i, layer in enumerate(model_truncated.layers):\n",
    "    layer.set_weights(model.layers[i].get_weights())\n",
    "\n",
    "model_truncated.compile(loss='categorical_crossentropy', optimizer=SGD(), \n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Check\n",
    "np.all(model_truncated.layers[0].get_weights()[0] == model.layers[0].get_weights()[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "hidden_features = model_truncated.predict(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(45000, 512)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hidden_features.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(45000, 784)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Hint: Alternative Method to get activations \n",
    "\n",
    "(Using `keras.backend` `function` on Tensors)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "```python\n",
    "def get_activations(model, layer, X_batch):\n",
    "    activations_f = K.function([model.layers[0].input, K.learning_phase()], [layer.output,])\n",
    "    activations = activations_f((X_batch, False))\n",
    "    return activations\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generate the Embedding of Hidden Features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.manifold import TSNE\n",
    "\n",
    "tsne = TSNE(n_components=2)\n",
    "X_tsne = tsne.fit_transform(hidden_features[:1000]) ## Reduced for computational issues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "colors_map = np.argmax(Y_train, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000, 2)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_tsne.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nb_classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([  1,  30,  62,  73,  86,  88,  89, 109, 112, 114, 123, 132, 134,\n",
       "        137, 150, 165, 173, 175, 179, 215, 216, 217, 224, 235, 242, 248,\n",
       "        250, 256, 282, 302, 303, 304, 332, 343, 352, 369, 386, 396, 397,\n",
       "        434, 444, 456, 481, 493, 495, 496, 522, 524, 527, 544, 558, 571,\n",
       "        595, 618, 625, 634, 646, 652, 657, 666, 672, 673, 676, 714, 720,\n",
       "        727, 732, 737, 796, 812, 813, 824, 828, 837, 842, 848, 851, 854,\n",
       "        867, 869, 886, 894, 903, 931, 934, 941, 950, 956, 970, 972, 974, 988]),)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.where(colors_map==6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nEJIw/z9ICX4F7LJYpgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8e941bc4a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = np.array([x for x in 'b-g-r-c-m-y-k-purple-coral-lime'.split('-')])\n",
    "colors_map = colors_map[:1000]\n",
    "plt.figure(figsize=(10,10))\n",
    "for cl in range(nb_classes):\n",
    "    indices = np.where(colors_map==cl)\n",
    "    plt.scatter(X_tsne[indices,0], X_tsne[indices, 1], c=colors[cl], label=cl)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using Bokeh (Interactive Chart)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <a href=\"http://bokeh.pydata.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
       "        <span id=\"0af86eff-6a55-4644-ab84-9a6f5fcbeb3e\">Loading BokehJS ...</span>\n",
       "    </div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "(function(global) {\n",
       "  function now() {\n",
       "    return new Date();\n",
       "  }\n",
       "\n",
       "  var force = true;\n",
       "\n",
       "  if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "    window._bokeh_onload_callbacks = [];\n",
       "    window._bokeh_is_loading = undefined;\n",
       "  }\n",
       "\n",
       "\n",
       "  \n",
       "  if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "    window._bokeh_timeout = Date.now() + 5000;\n",
       "    window._bokeh_failed_load = false;\n",
       "  }\n",
       "\n",
       "  var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "     \"<div style='background-color: #fdd'>\\n\"+\n",
       "     \"<p>\\n\"+\n",
       "     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "     \"</p>\\n\"+\n",
       "     \"<ul>\\n\"+\n",
       "     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "     \"</ul>\\n\"+\n",
       "     \"<code>\\n\"+\n",
       "     \"from bokeh.resources import INLINE\\n\"+\n",
       "     \"output_notebook(resources=INLINE)\\n\"+\n",
       "     \"</code>\\n\"+\n",
       "     \"</div>\"}};\n",
       "\n",
       "  function display_loaded() {\n",
       "    if (window.Bokeh !== undefined) {\n",
       "      var el = document.getElementById(\"0af86eff-6a55-4644-ab84-9a6f5fcbeb3e\");\n",
       "      el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "    } else if (Date.now() < window._bokeh_timeout) {\n",
       "      setTimeout(display_loaded, 100)\n",
       "    }\n",
       "  }\n",
       "\n",
       "  function run_callbacks() {\n",
       "    window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "    delete window._bokeh_onload_callbacks\n",
       "    console.info(\"Bokeh: all callbacks have finished\");\n",
       "  }\n",
       "\n",
       "  function load_libs(js_urls, callback) {\n",
       "    window._bokeh_onload_callbacks.push(callback);\n",
       "    if (window._bokeh_is_loading > 0) {\n",
       "      console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "      return null;\n",
       "    }\n",
       "    if (js_urls == null || js_urls.length === 0) {\n",
       "      run_callbacks();\n",
       "      return null;\n",
       "    }\n",
       "    console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "    window._bokeh_is_loading = js_urls.length;\n",
       "    for (var i = 0; i < js_urls.length; i++) {\n",
       "      var url = js_urls[i];\n",
       "      var s = document.createElement('script');\n",
       "      s.src = url;\n",
       "      s.async = false;\n",
       "      s.onreadystatechange = s.onload = function() {\n",
       "        window._bokeh_is_loading--;\n",
       "        if (window._bokeh_is_loading === 0) {\n",
       "          console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "          run_callbacks()\n",
       "        }\n",
       "      };\n",
       "      s.onerror = function() {\n",
       "        console.warn(\"failed to load library \" + url);\n",
       "      };\n",
       "      console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "      document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "    }\n",
       "  };var element = document.getElementById(\"0af86eff-6a55-4644-ab84-9a6f5fcbeb3e\");\n",
       "  if (element == null) {\n",
       "    console.log(\"Bokeh: ERROR: autoload.js configured with elementid '0af86eff-6a55-4644-ab84-9a6f5fcbeb3e' but no matching script tag was found. \")\n",
       "    return false;\n",
       "  }\n",
       "\n",
       "  var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.5.min.js\"];\n",
       "\n",
       "  var inline_js = [\n",
       "    function(Bokeh) {\n",
       "      Bokeh.set_log_level(\"info\");\n",
       "    },\n",
       "    \n",
       "    function(Bokeh) {\n",
       "      \n",
       "    },\n",
       "    \n",
       "    function(Bokeh) {\n",
       "      \n",
       "      document.getElementById(\"0af86eff-6a55-4644-ab84-9a6f5fcbeb3e\").textContent = \"BokehJS is loading...\";\n",
       "    },\n",
       "    function(Bokeh) {\n",
       "      console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.css\");\n",
       "      Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.css\");\n",
       "      console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.5.min.css\");\n",
       "      Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.5.min.css\");\n",
       "    }\n",
       "  ];\n",
       "\n",
       "  function run_inline_js() {\n",
       "    \n",
       "    if ((window.Bokeh !== undefined) || (force === true)) {\n",
       "      for (var i = 0; i < inline_js.length; i++) {\n",
       "        inline_js[i](window.Bokeh);\n",
       "      }if (force === true) {\n",
       "        display_loaded();\n",
       "      }} else if (Date.now() < window._bokeh_timeout) {\n",
       "      setTimeout(run_inline_js, 100);\n",
       "    } else if (!window._bokeh_failed_load) {\n",
       "      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "      window._bokeh_failed_load = true;\n",
       "    } else if (force !== true) {\n",
       "      var cell = $(document.getElementById(\"0af86eff-6a55-4644-ab84-9a6f5fcbeb3e\")).parents('.cell').data().cell;\n",
       "      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "    }\n",
       "\n",
       "  }\n",
       "\n",
       "  if (window._bokeh_is_loading === 0) {\n",
       "    console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "    run_inline_js();\n",
       "  } else {\n",
       "    load_libs(js_urls, function() {\n",
       "      console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "      run_inline_js();\n",
       "    });\n",
       "  }\n",
       "}(this));"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from bokeh.plotting import figure, output_notebook, show\n",
    "\n",
    "output_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <div class=\"bk-plotdiv\" id=\"e90df1a2-e577-49fb-89bb-6e083232c9ec\"></div>\n",
       "    </div>\n",
       "<script type=\"text/javascript\">\n",
       "  \n",
       "  (function(global) {\n",
       "    function now() {\n",
       "      return new Date();\n",
       "    }\n",
       "  \n",
       "    var force = false;\n",
       "  \n",
       "    if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
       "      window._bokeh_onload_callbacks = [];\n",
       "      window._bokeh_is_loading = undefined;\n",
       "    }\n",
       "  \n",
       "  \n",
       "    \n",
       "    if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "      window._bokeh_timeout = Date.now() + 0;\n",
       "      window._bokeh_failed_load = false;\n",
       "    }\n",
       "  \n",
       "    var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "       \"<div style='background-color: #fdd'>\\n\"+\n",
       "       \"<p>\\n\"+\n",
       "       \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "       \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "       \"</p>\\n\"+\n",
       "       \"<ul>\\n\"+\n",
       "       \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "       \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "       \"</ul>\\n\"+\n",
       "       \"<code>\\n\"+\n",
       "       \"from bokeh.resources import INLINE\\n\"+\n",
       "       \"output_notebook(resources=INLINE)\\n\"+\n",
       "       \"</code>\\n\"+\n",
       "       \"</div>\"}};\n",
       "  \n",
       "    function display_loaded() {\n",
       "      if (window.Bokeh !== undefined) {\n",
       "        var el = document.getElementById(\"e90df1a2-e577-49fb-89bb-6e083232c9ec\");\n",
       "        el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
       "      } else if (Date.now() < window._bokeh_timeout) {\n",
       "        setTimeout(display_loaded, 100)\n",
       "      }\n",
       "    }\n",
       "  \n",
       "    function run_callbacks() {\n",
       "      window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
       "      delete window._bokeh_onload_callbacks\n",
       "      console.info(\"Bokeh: all callbacks have finished\");\n",
       "    }\n",
       "  \n",
       "    function load_libs(js_urls, callback) {\n",
       "      window._bokeh_onload_callbacks.push(callback);\n",
       "      if (window._bokeh_is_loading > 0) {\n",
       "        console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "        return null;\n",
       "      }\n",
       "      if (js_urls == null || js_urls.length === 0) {\n",
       "        run_callbacks();\n",
       "        return null;\n",
       "      }\n",
       "      console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "      window._bokeh_is_loading = js_urls.length;\n",
       "      for (var i = 0; i < js_urls.length; i++) {\n",
       "        var url = js_urls[i];\n",
       "        var s = document.createElement('script');\n",
       "        s.src = url;\n",
       "        s.async = false;\n",
       "        s.onreadystatechange = s.onload = function() {\n",
       "          window._bokeh_is_loading--;\n",
       "          if (window._bokeh_is_loading === 0) {\n",
       "            console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
       "            run_callbacks()\n",
       "          }\n",
       "        };\n",
       "        s.onerror = function() {\n",
       "          console.warn(\"failed to load library \" + url);\n",
       "        };\n",
       "        console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "        document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
       "      }\n",
       "    };var element = document.getElementById(\"e90df1a2-e577-49fb-89bb-6e083232c9ec\");\n",
       "    if (element == null) {\n",
       "      console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'e90df1a2-e577-49fb-89bb-6e083232c9ec' but no matching script tag was found. \")\n",
       "      return false;\n",
       "    }\n",
       "  \n",
       "    var js_urls = [];\n",
       "  \n",
       "    var inline_js = [\n",
       "      function(Bokeh) {\n",
       "        (function() {\n",
       "          var fn = function() {\n",
       "            var docs_json = {\"0a107901-21f4-414c-8b60-0314827c77c9\":{\"roots\":{\"references\":[{\"attributes\":{\"data_source\":{\"id\":\"96dd01f3-cc06-44ef-b6bb-1eb06c543e23\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ad8b2453-bb3f-4c0e-9cd6-8cb23e16801f\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"661a558d-6ef7-4be4-be81-dea7a71a8c70\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"2afe8a3b-fde7-4e6e-8ec4-2688be847a5c\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"ba216e52-be76-4db2-8352-ebe09293b50b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"fb675052-09f3-4302-aab8-cf62d3f45bc5\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"458559a1-f0e8-49c5-9590-81bb5589fef2\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"999d8d98-c897-40de-b76a-dbc9d54a64d2\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"hIV9LF5GK0ArOtgnvT4bQKZ8AhpjZMC/KJuMZcrTKUCcHMPQgtEhQNGYU/vRtSpA7XTJLSlY8j/uSSpWxXYZQAQFOd3E2fE/oo8uaG7hKEBkD+pCg0AcQNwcMgKwgStACo/Y3hjFJUDYpuRbz/UsQLX2ygH8tSZA4SDXBVGJJkAt5PcIyRcpQDlfUGTlChtAC6BE+xT6EkArElL1JDYoQOPGRFM9fCJASGAMXLpFJkCP3048n8sHQFaWxm2DIitAt7O6NT/2IUDdG/3wA78sQPv8f/SSehdAqlKokA1wB0Bt70RX7XcpQAdcI+cZ2uM/Qf22fe+3CEA5jlaiswEKQOy6G6y/yydAxoUh1dAeJECBNZRzCZgpQGKZM7BGvxRAKsKcteLHKECL+9J7rhERQOWVb8NfliZAdY23iCFjJUD4DnOUxIklQEIKVR8b/w1AqhSxQl53BEBVHRGAq8chQJU7//gwnxhA0IbatgTkI0ADN81c/sAmQDy9XUwiaBNAdO0YMNwoKUCz+d7qHOAhQDDX5HEuZyZAWgAfqa1cFEC4GrENLkkLQFaabzQhGRRAmLOToOO9G0AMVcDU5VAoQCzAIEFCcRlA+h98K4ZlKkD4ie2GilPoP/TS44ZuTyZAtSRwskmtJUC1dPOXiEMeQK6xW04TuSZAc1xycQQXCkDaZ//BH6AoQNuTyp0sPC5AlgaooyRVKED4hOvniWUSQKp4mm1KgSdALmuIH7s1HEDotfUPHbwmQFp/BTs/ny1AsLg82VlmJ0B+te6RcignQC3yH8BlqipA9LnQbJ8BJkDzDp8av9gqQDWPBBuNJSRAC3NdwC+IEkD22CG85J8ZQLizA/EplSZAsvlHZD1vIkCVXmRCcksEQA==\",\"dtype\":\"float64\",\"shape\":[83]},\"y\":{\"__ndarray__\":\"BUN2hUXhE8DuKsGlt5D7v5cMcKawGSBA+QZirdaaDcA2J5WZvAEEwAvzS+dkXhDA2sCBW9uWDUAPxF8LJDERwMNsuJwflgpAYCBhXETkGcAZIkYE0v35vzkZhNSXnxLAWh68TODvGsBveTEi1yEVwBRI2ZxVvRLA5T+Iqiu9FMBv/04tdE4PwNKINRs/xPy/fk56M3DP2T++JdxSGu0TwKVYLQMk8wvAevAeL9G/C8Ayff0l7pALwJeBW1neZBHAnMEfFHffBcA+9r/v10sVwDx4yGDGTQbAC1u7KjRiAEAYBZR6NdQMwJc6zRRAGx5A6Cb64I+V7L8Syq+ZQbUUwGZpQombUBTAE3yZvMr+/78ycgT0m7EBwO3iFtm8ARHAQZsAyuh1FsCc+zRGNgAGwFTIFGuq7AjAQApY7/pMAMDX16KVYrMJwHDTNShLdJ8/tGE/ru0jAkA9fBKWrxkEwJLGVNxjyv2//+S3Ob5wC8Bw7KqJcaAVwHIa1KOSUPO//gL+/qYoCMC6b/T2OPQCwLY1qQEAPRbApSWrTsD5CsAQDb33u3iXP9rI6C0U9fm/ctwajCgD+781ADRs6G4HwBTY4EMIS+Q/Uqln/AqkCcDXLyuNhzgcQJ3QmXH50gvAx7J8orrlAcDCBuJXBvQPwKaZt8IJ9RTA1lgKfnlT1r893UjLxMkUwGco0wFg0g3Am3nJea4WB8ARdKhZ+fAWwJ50YTjhjhDAqAbmZf/CEsBFy7PQRTb+v1KSsktUABbADX/8TmvxGsBUreAk9IsVwBG3hL4G3QzA24xwOnOsGsD6qIsR1CMXwKdO200ktAHAZaId5kMNGMB4xTuSfmQlwBfS3m4xjOy/5wUN0c28CsCAKhi251Smvw==\",\"dtype\":\"float64\",\"shape\":[83]}}},\"id\":\"96dd01f3-cc06-44ef-b6bb-1eb06c543e23\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"XMQzwjPC9D+RNenDYjP9PzZ7NeszsghA8Mb1eiZc8L8u3OV8C94PwK5hr4Mg/AJAqmAnHh/o7b8/LB/ljnUIwIx7kOEXBADAGiwuGWGt37/l9EUEM2TaPxD4capJSrq/bA9tD6PqAsAWhCAYBgbcv+vDMOVT4wNA7XcwUkW32r9a0nE1hqEMwLXXMDyh8wPAKqU8g7as3j//JuXc6wTzPzLzKDz+kf6/eF+KB7zwB0C4E+C6rr7wP2W9dufAJem/xlOWDkJy7b90UWIPqg0TQG8UB18u9AnAhpWj7V5L/L9WebE115sEwLhzdtVznty/oRTjm3zN+T/hWJ1083sBQEAcpDbnnv8/1Cl05wUSB8BqqBrr8d4HwPNyJntl6/a/iQhvkMqH8L/V5qZJ51X4vx/NtL3I9QbA2Kg7rDrS+D8EXmZ8YJz+vwQI/0UmSw3A1d9ExUVXEcBLQOxKdR4FwAZI35kxE/C/0l0LhGWID0DSMyy9YTYQQPjOBDS3Lts/o+VtMz7oEEBY8oQOU2zQP5odjJu4DQTAVPn+auo287/n8LQ8lG4HwLqExucbgATA9ZVOjmWaBMCiEzELR/AQQEFUAWfDFQPA3B9XE/H3AsDOM+fcsm0GQOyHolC7+/0/gsJ4gclRDsAHwe/q99D1v9A84KB28uu/GjatGiogB0DqYnA3XsbRPwZ9oPyOBA1A0lYDNHCpAkCEhk9OXfvxv4A5UdFRawNAl2g96ZKoA8Axqb+d9Bb/v1a8B9SL4/c/iU0fLktL9r9JzoYKTcsBQJDF247EaOc/AgvvgJLF0L8DK6UgHEXwPz7g6UUiaAjAMLsvXU2bzz8fqY2D4pEJwHBtVD0J1eC/K6LYHTh+/7+E0uBmKzPzv8RTlIiD4fk/T4q7FuB4/L/gycCd2p7Nv8LWLLbfCPE/feDjNRChBsAY6C/HEM3sP5aOXZEWkARAHLZDYHQlDUBe76+ekH72vw==\",\"dtype\":\"float64\",\"shape\":[92]},\"y\":{\"__ndarray__\":\"i11ubb+DJ0B9w7EfJBAcQBwwOB6nkyNAxyJSO2WrJ0A/rlKfa4olQIxvabwXpCdAz9Q5ISBlHUCcJwpNKwQpQF6IIVLndBpA1WvCrI02JUCkZDYBvHIpQNWNT5m5jiRAECfH9z/jJkDqY1lSq0chQHashaCzryVA5fbFWSBFFUBM2X5yKcUlQP2vFNW5mCNAv7o7u3yNJ0DNGOpsMxomQHACF4vphSZAGYUgAYxrKkBfLH789DcoQAyGLdHMZx5A5MmvUPXJKUBIfjiy09AsQAGcHCUcjhlAQnCxsFVOI0AaXxtRwV8cQJPqqcDDsSJADJvragRaJEAUJ0DbNDEqQJPIgTqfuyVAvnJlZoKQGECi2c+dOKgpQFuGuQZMuSlA2D3FzW1fK0AzW16NvkolQFmTEIXXEiBAw0i+6S7UJkCxQaD/xE8oQOmkSKs80iRAvsWTcVL0HkB8mBvnK5ckQIJkuaMw3CNAvpWgIXi9KUD0OI2Zlq0mQAkNaNnooiFAgH+wh1UbKUBCWZgxaHYXQFUno5lJ4SNAOxPz5fJSI0A/McHX1fIoQNcdSFebcSVAUOaMI6tjJ0CBuHLhv8YpQFKVY130XxdAd6LMs+ZlG0CDY1knZj8kQCQrn4m+oiJAvYTQ+rfhJEB2xX/PPucaQAu4x62zUC9ADsLPF2kfJ0AwzuR/cLcnQICoHdEzjyZAZkTrN48YIUCyjQipCkkiQNfmMry2FypAUW8RZJMCJUBkuLD5GK4pQFGdsqq2JCNAJOR82k6QHkB1hU3klrEoQN2/BHmODShAxrw60J9KKkAhYBzoQXwpQKJbtIOa0yZA0XySKEbEI0Co9JHv1i8nQFd06E0DMyhA5fWriuoyKUC7hcUdcIAlQNK9mbDWkSZAlONb4ajNJEATeCKOCWklQEUUgszeXyVA/1q7USzeIED54xk8uCQhQA6vlu1EUylAdCtdM/f4I0BrcJA5SpwFQA==\",\"dtype\":\"float64\",\"shape\":[92]}}},\"id\":\"45bbea89-c56c-4eef-b115-72e19981c894\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"nkilyZEMI8AbXYAXYRojwFAZ5QEqBxTAPTPl0MD7F8AER0TB97AdwKqICBSufx7AYLMve7anGsAGhlC+iwETwFcTvLZrYSPA+ScFQ416HMASNFXbiucgwCupinKBRRjAuznP8OnyIsAEiQ0S9UcVwFotRA7y9R3AuBxm1A4tFMDL5Aj/u6wjwPBlrSgsYATAh0Usj8I3JcBvBjk6fUsjwBoYhkVhIhLAoBBa+E7VHUCl+foyPBcbwG80RJGsMRTAP2y3Now7FcAsIR7hU0QhwBjCi5Z70CXAhJ5tGmGHH8BMbNIXfIYWwDfRbKWDLgBAUirpVJ/z2r/njaTYYe0kwKV+PSLAwyHAb/dEen11GcCFpui6P10kwJi3rOxuIxTATT8IFU6AL0ChCmSElsEbwFfvlhpXLR7ApR2TkLu5GMCUf9szrAYYwEjo32HlSR7A184a19jfIsDD/d0+rFoWwD0zH3fPrRzALuVUfhDbEcCDXSe6IPsawPcLq8LRkR3A1XQi8dDnHMCN3muCz3AVwEMl9WdV3RrAcYIOuu+pIMBvihKKblMgwJ2q2CKswhXAoBkLwVjhJMB1b0C4Xf0awJK5zm8TliPA/VtwSSYdF8Ddnbd6WOwfwBoeBqVk5APA2Aj57k4sJcAMIYfq4QsdwMAgD0aIIyDAKOi2UY5OI8CZsxnPwQAlwK6DEDxKlxzADIfYHxxzG8C1fx8HRp4YwEc7XZoZUBbAMmiHT/G0IsBYxDp7f70MQFW4b7puJSHAItttQDsyIcDVXfKfpRAgwFFQvP22PyXA9LekT2BPIcChFxCd+ffYv73MQvToWCHALgDpXm4kIMATcl6K1hkGQEOgYkseP+k/MERG0t6YHcD/mAfTXzIjwJE+XynM4RDAX0cMtiBIDsDyz4DUyiAdwKhK3HmRASXAOF4F94S9FcBbQsmrfFYQwAQc16K4rR7A2pKnRaMCE8Dlx8+Nb8IiwHbVDl3bvhnAzFRdXG+8I8D/CvSz3YMjwGAfnfFQtQ/AaVLkNz8AHsDphE1vP1kcwHowJ+PI/hTASEKCYTJIIsAFjuxRyIAhwPq4gU4NuyDA7J/kuO9sGsAqGJO/Kn0XwHxtXLVusSXAHPSGYc0uFMBJQOk6fcAZwEgpJWwPmhnAvb0+BxANHcCkYx7p/6kYwP7v4TZBhhHAR3DRdAJ+GsD8gABIR1YlwEIyYObhtyPA3kmvxHjZIcDl41sDzTsYwA==\",\"dtype\":\"float64\",\"shape\":[116]},\"y\":{\"__ndarray__\":\"ChIKFh+TKcB9tPAeBvsnwCMOQ503HCrAB1PltYmRJcCHRiy+RCAiwOaEP9oSZCrApN8gZdx5K8Bom+Xr6SwnwJKB0XHRDDHAXIJsBNc8JsCPZs0Y0IUtwFnG8hjteSbAOydUr1fBLsBMCudJseUnwNY+w0E7NCTAlqJORtoYKsCd8GeFF+MqwF92cxuNo/8/ahLA8ZrsL8BqbImL97ArwETvyc+MQCTAQx/TkQ5rI8Bcc12u5LMvwIyMPZrrZCLApyWDpRHXLcA51PgVpTswwJwQn62S6i/AdShG5M4ALMBh869i520pwGX/ndxy7xpAXL43ose0FEAeXvztvBAtwCgVufn3NTDAJBYQgKSlMMAbmmhz5ispwCl19TGNmC3A8ZWorzEkG0BqsIXwG+4nwPR2bqFkfCTAzT5qyPc1IsAI+1uAxqsjwGoRdwBGVzDAKdaKoIw0KsC8cnlzvwEmwHf8HnF9Ji7Aw82/14LYKMAFF7AguoUwwHyNCUpqTSvAzQW52OG2KcBv3q+ypQAtwFFaA5+bUSrA39Hhq0xjIcAHOOjCfg0qwFA1YOKcwSPAbHG+XhGdKcAvPAUb/KQvwKwfCshm0C/AAWwT06sGIcA46+BauOQgwGBarajZefk/H2sI2eOKL8A0Hgbpbv4lwJOWoqEtmyfAVdWbezBCL8CFuz3kIcUwwNcUpWG3ESzAWjEFg4iCKcBpMllmbAMhwOYoOx+QoS/A5gPeMvLWLMAttEVYUcwVQGMZXb66OTDA5A8oGKEHK8AaCDxyu50swGLILjAIEi3AU9MHoZe/JcAxT9EhF7UIwIHqkfGoqynAB7hvKJ76JsAVcvx66R8XQIyv57QIqgBA0D6i4jmTMMBGo80MwAwuwCkU8c3xwifADjnNp1oOJ8BwBL9wgpwvwA4NG1HJIC/AzYF7dGsqLcAHT2m5c68qwHEeGR6P4SvAG6YPGkkpKsDKBlNwmKkowO1+ahXBVyPAsPyr61pDK8DfDKhG6SwtwIpbT4DzS9g/TSKaarnKLsAD6evw1MwwwMk22I+0EyXAWkBVmPnOIsBBHQ/tpdIuwAs0Zm5CwynAK7IHFzLrLMDr0cn9AD8uwEdToV8u8i/A9m1oOKArLcCRI637wVAmwLaUSFDgDCrARu1eXUJ1J8BG2jh5Yt0mwKARiPxV0yLAd8+MztfhLsA9T2xKbf0wwPdzHrX6CDHAhlGYokvQLsDX57Nbw3YnwA==\",\"dtype\":\"float64\",\"shape\":[116]}}},\"id\":\"1c51aa9f-10a8-4361-a173-48c7c6942006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"458559a1-f0e8-49c5-9590-81bb5589fef2\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"96b7e4be-6f1b-4a47-91db-cbd18bed4195\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8336d1d8-68b3-4cbd-8dc8-7022be931d48\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5b22d030-9f3b-46c8-aa62-4805a15b2170\",\"type\":\"Circle\"},{\"attributes\":{\"label\":{\"value\":\"4\"},\"renderers\":[{\"id\":\"2afe8a3b-fde7-4e6e-8ec4-2688be847a5c\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ed92957f-5152-4fdf-85b9-3cb1d1078b41\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"d651deee-ae2a-460d-be1d-b023292a3a4d\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4b00d740-2b64-4c58-ae14-8b519c061d9e\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"961692d3-5d9d-413b-af3a-7dd95eaa6773\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"3e5fe63d-38a1-4a1a-91c9-e5c9afef99b8\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"0381250d-3021-4a37-971f-67972b73567c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"7edee319-08ef-430e-9e40-6c2e68c515aa\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"9\"},\"renderers\":[{\"id\":\"61d151cc-1443-4377-b2a5-71fe0b5ff494\",\"type\":\"GlyphRenderer\"}]},\"id\":\"aa1ebdaf-bc54-4a07-8fc0-79d1f3f9a958\",\"type\":\"LegendItem\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"0eddfe14-cee1-4853-ac32-f0d22dc8699e\",\"type\":\"SaveTool\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"46eb72e4-911b-4f17-afa9-a94d42dfcbef\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"3a9ffd9d-7d1f-4680-849a-dbd2dc4439a9\",\"type\":\"PanTool\"},{\"attributes\":{\"label\":{\"value\":\"7\"},\"renderers\":[{\"id\":\"999d8d98-c897-40de-b76a-dbc9d54a64d2\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d7fe879a-41f4-4326-819d-f45895b79e68\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"e7b884f1-a7b7-4de5-91dc-c27c5c549b60\",\"type\":\"ToolEvents\"},{\"attributes\":{\"label\":{\"value\":\"3\"},\"renderers\":[{\"id\":\"d50622b6-c068-4062-baf9-03dba5688029\",\"type\":\"GlyphRenderer\"}]},\"id\":\"44f269c3-d739-4844-b205-f080761e0f00\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"7b86a82a-b121-4e1f-ae71-be992129c14c\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"45bbea89-c56c-4eef-b115-72e19981c894\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"f331f988-abb4-4bac-baaa-3d326ad1e8af\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"fcf23350-cea8-40c0-9b8d-e664d26c8000\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"58a4965f-f738-4792-aade-401eac316fc5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"rBlHXEf/CcCGyCC1tKwIwEAPOefK7iTAcjFoNYgIH8A7PaxS29YlwIbPu9SouCLAr2toAcNnAMAOrSFfBFsyQKTdjUT1eyTAGmKt09hlGMBeK4UpPxMmwH3bTaOE6fC/rQ4oLAmdKMDiH9IzwHEhwElljn3Z4SDA/FAFJXdxA8AL7+yEl80gwCFHY84PhOu/ivsL/ea/GsAUGnFvswklwLgXw9Xayu2/oCR+zS7nIcDwj4ARV7QawJVO71P4KRDARweJtb2CI8CJJiOSb3AnwOlvRitEtx7AvMhgO0UkJMCDtf90bnwmwP8ZlgiWEibAXydnvarLD8BLjCVD0qclwCp5au8B7fW/eOUDu+Pf87/jeDinBL4hwNqIfDSICem/Byt3ENhAH8BrCd2jyiIFwBR7LNHM/iHAD/TwNnXuIcDWKn3Hym0ewPxyB4QjOiPAyRiVj6vjFMAeAvEwZBP4v7IkQXfwqCXAI2elwbTuJMAOKsZ7iysZwKuJfRpYVyfAzwGWBM8DJ8AxNOeQIg0jwB7bMQ00xBPAsRM72/QAIMAUmdOL1Y8NwPR4uZ2gRAfAEPguPLAeKMCX3shFmJMiwGpjU8fzLxTAIpPljqJPI8BF2XXe05DAP35p9YS4EAfAJstx01+pDMCBN/SOjnIQwKy4r6/eGhfAbzFPs28EIsA9W1UDSCAbwA4XB3zB2R7A5RSTDf3bIcCnRkT2bZAfwIi0V5RwSSDAsFS7YNG99b9uaaozkHkWwDvB6LR9ixrA941tex1wIsBW6Nip9mgNwESyrcKmYyHA1GTz3ujkIcBORC9Bwm8gwFcDzR4c0yXAYKsgnLDyur9i5yyP3UUXwBm71dqdRRvApU+gl8+YFsB1ezwoqVUewHqTJncgWvq/ryTqCehaIMCLFZ6VDZUFwJjxfqe8LiPAVCtMb263J8Ci69tGdiIhwKRTLU0TNgfAW/JuiJfdJcCtbAutK3QjwI1NAPI0DCHAWYGlTZlLJcAo90cTU3wiwOAI+Zc1nCDAnQu5+ZHhFMCxxFCSsKMgwK3IMFcCoAjAvDuIlgP+IMBPSpzC4WgUwEFWr4x7OwnAfg9zv7KfH8AkR179L5AnwHzjkZ5KoR/A0AWTJI4BA8ANzCztFIUlwPWQ2BQ4lR7ArxhTkr0vJsCu6GbaFFQLQIKc39zA7h7AiMb36rgPJcBXZX5RCKIcwCYou0sm7QTA7gbc9SSPBcBWEMceUCkcwNP+g0HVQBbAeb1Sc0CBIsDQhqpg2A8lwMcwGZku/78/yqDNIvMSH8Be3ohPeqEUwP+kYATEnA3A+WvyKXLPCsA=\",\"dtype\":\"float64\",\"shape\":[124]},\"y\":{\"__ndarray__\":\"50FNnhKfNUDDIonc3ow1QG12RS709zBApXbEEDd5NEB+73yP2nA1QI8+lDzmMDVAxlNNppEIM0BvGuZzoz4UQD0oRQMR3DBACT7il+IpMUCKCnHqf3QzQKH8VOH82DRA6dIi17uDMkCLJ0qAUZ40QLL0EGg48zVAZq+Eu4vyM0D1eXJjKFs0QLw9rZ86cjNA0aMTLDEHMkDlqsmjHjYxQKNYLlfRhTRAnrIirOKnMUCg6WRW958yQKH4obRIFjRAu1guCeewMECdCReMSfgzQPbahPlbcTBAnfKRz9SfM0AqQhzwo/QzQP6d+naoKzVAN0BdMeWOM0DzdmDDYjIyQAHwAFuBqzNAl4qr71DqMkBuWWUdMwI1QDaVv45WLDNA/n/pZ958MEDUow1DMh41QIGEk2S/7jNA8IFy4WbINEASXKN3WAo1QNiHaDzzRDVAjqnd6i0nM0BV815OZGEyQLJ57pcC1jJAaYh7gA0eMEDlzSyfCNQyQKqVudg9NzRAtxKmx7RdNEB3T+2eemI0QMNZYCVbBjRAsesKTeIxMEBYj7dxjzo1QESPB61/RDRApgFP4BYwM0DrZAZm7uE0QLqDAf0aZDRAp+87H8icNED6u04cF1gyQNioljnr5DVAJTmS61DIM0Ah/3gwrSA1QKCVhFva8jFAB3Soqxm0M0AD2NKqhaUxQJtJPp4lgDNAZPfzlmewMUAQt/yjK0g1QJb3Jape7zNA2JuiYRIcNEDzUy1+Cyo2QFna9/GqdDNAYL/hthp7NUCEQm6qHaQzQNfUNdDXtDBAJLSedJvfMED4fm33QJw0QMKdkc8CKjNAa3J2ug+0MkCzqP2OhNMxQHzmr5MnbzRAiKPljwE3NEC7CAuwTNUyQMBZenBAqTNAp0OyPTHmMUBV9hPuzuUxQMG2+SDXmDFAKdrmaZ4ONEAvy2+EIvgwQDQnvNd9ljNAOK1Dk/+xMkDaikC95woxQHRH6W5ggjBAPF365Hs/MkAJWWBxDtQvQDy3/fZK9i1A36BDWXdpMUD5VgvXFL00QBeqaH6xXDNAW6LtfzxVNEA1H/yCSLM1QCbueiPWxTNAW25bq/tCL0DLCb3NijI0QCo3/KNVVzJAH1g7LmpJNECoHlWEp6IxQI3vLonl2DBAur7Zu+U1NUCNabUDrIQuQMAuZ7xwQzNASMcgwZcYMkCxxlqq2mAyQK8V4FsxOTJAXc+IP5tHNEB+u3dsHY0xQIBKrBEhLDRAW/nGuOJ3MUB5Yt3M7JovQMY1NYJdZzJA2gW7BuIQNUC9XOEJ5ic0QLmLO1cQPDVAs/pItfD1M0A=\",\"dtype\":\"float64\",\"shape\":[124]}}},\"id\":\"6833c653-d77b-4f2a-9168-09a35cd7fa4e\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"5\"},\"renderers\":[{\"id\":\"3e5fe63d-38a1-4a1a-91c9-e5c9afef99b8\",\"type\":\"GlyphRenderer\"}]},\"id\":\"8806006a-a7e9-431c-b482-e2904b73b49d\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"3a298aef-3e85-486c-a822-8d8ba749ea13\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"10285d43-a120-4aa9-9f24-5ac28ffa46c0\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1d84d47f-908a-444d-8a45-ba8c8cf0ba79\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"b2e97d19-5b4d-4d3c-8df5-a5f760eda438\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"6833c653-d77b-4f2a-9168-09a35cd7fa4e\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"39b8e513-f126-410c-b9ce-65c7408372e0\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"8336d1d8-68b3-4cbd-8dc8-7022be931d48\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"4a6ab629-922a-4cca-9d25-6fc2b76893f4\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"284a2067-bcc0-47b3-a4e9-a9011ea1b31f\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"8\"},\"renderers\":[{\"id\":\"a6fa1671-46ff-4904-a75d-b3e1c7ee8798\",\"type\":\"GlyphRenderer\"}]},\"id\":\"04870eca-e5a2-4689-b1a3-bfe781ef7872\",\"type\":\"LegendItem\"},{\"attributes\":{\"items\":[{\"id\":\"51ea03b1-9398-41c5-8b57-0c12c1caf274\",\"type\":\"LegendItem\"},{\"id\":\"b1689a95-a3fc-4723-b733-838dc50d2bc9\",\"type\":\"LegendItem\"},{\"id\":\"479fa1de-d9b5-4c46-a324-a0dd27bc192e\",\"type\":\"LegendItem\"},{\"id\":\"44f269c3-d739-4844-b205-f080761e0f00\",\"type\":\"LegendItem\"},{\"id\":\"ed92957f-5152-4fdf-85b9-3cb1d1078b41\",\"type\":\"LegendItem\"},{\"id\":\"8806006a-a7e9-431c-b482-e2904b73b49d\",\"type\":\"LegendItem\"},{\"id\":\"c3452e2e-36aa-438e-aae4-7bf7fde7d579\",\"type\":\"LegendItem\"},{\"id\":\"d7fe879a-41f4-4326-819d-f45895b79e68\",\"type\":\"LegendItem\"},{\"id\":\"04870eca-e5a2-4689-b1a3-bfe781ef7872\",\"type\":\"LegendItem\"},{\"id\":\"aa1ebdaf-bc54-4a07-8fc0-79d1f3f9a958\",\"type\":\"LegendItem\"}],\"location\":\"bottom_right\",\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"632de7ab-f72d-4cab-b234-7bba0fabd3e2\",\"type\":\"Legend\"},{\"attributes\":{\"label\":{\"value\":\"6\"},\"renderers\":[{\"id\":\"58a4965f-f738-4792-aade-401eac316fc5\",\"type\":\"GlyphRenderer\"}]},\"id\":\"c3452e2e-36aa-438e-aae4-7bf7fde7d579\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"5705cbda-a125-4b95-8dcc-a7a4e409bb0a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e34bdd34-2372-42a7-97c4-71acb03b6bca\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"75f57b6c-48b5-4d3c-9b7b-bc20eecabb2e\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"d50622b6-c068-4062-baf9-03dba5688029\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"de561971-5cfb-4f3e-a4a7-a303933ba023\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"aeff42d5-9279-484c-8e33-ad92cff0e64b\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"de561971-5cfb-4f3e-a4a7-a303933ba023\",\"type\":\"LinearAxis\"},{\"id\":\"582554cc-769c-4e47-9cf2-1baca126df0e\",\"type\":\"Grid\"},{\"id\":\"aeff42d5-9279-484c-8e33-ad92cff0e64b\",\"type\":\"LinearAxis\"},{\"id\":\"f4204887-e43f-456d-86f5-0e67d500ed05\",\"type\":\"Grid\"},{\"id\":\"3e7713e2-c4e3-4fad-a332-a1102c07fff4\",\"type\":\"BoxAnnotation\"},{\"id\":\"632de7ab-f72d-4cab-b234-7bba0fabd3e2\",\"type\":\"Legend\"},{\"id\":\"c78ed4fd-0dd2-4855-9a0b-a81bc58f6446\",\"type\":\"GlyphRenderer\"},{\"id\":\"4a6ab629-922a-4cca-9d25-6fc2b76893f4\",\"type\":\"GlyphRenderer\"},{\"id\":\"b2e97d19-5b4d-4d3c-8df5-a5f760eda438\",\"type\":\"GlyphRenderer\"},{\"id\":\"d50622b6-c068-4062-baf9-03dba5688029\",\"type\":\"GlyphRenderer\"},{\"id\":\"2afe8a3b-fde7-4e6e-8ec4-2688be847a5c\",\"type\":\"GlyphRenderer\"},{\"id\":\"3e5fe63d-38a1-4a1a-91c9-e5c9afef99b8\",\"type\":\"GlyphRenderer\"},{\"id\":\"58a4965f-f738-4792-aade-401eac316fc5\",\"type\":\"GlyphRenderer\"},{\"id\":\"999d8d98-c897-40de-b76a-dbc9d54a64d2\",\"type\":\"GlyphRenderer\"},{\"id\":\"a6fa1671-46ff-4904-a75d-b3e1c7ee8798\",\"type\":\"GlyphRenderer\"},{\"id\":\"61d151cc-1443-4377-b2a5-71fe0b5ff494\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7edee319-08ef-430e-9e40-6c2e68c515aa\",\"type\":\"Title\"},\"tool_events\":{\"id\":\"e7b884f1-a7b7-4de5-91dc-c27c5c549b60\",\"type\":\"ToolEvents\"},\"toolbar\":{\"id\":\"10a19e19-02a2-475b-8406-3c21d8da5b46\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"284a2067-bcc0-47b3-a4e9-a9011ea1b31f\",\"type\":\"DataRange1d\"},\"y_range\":{\"id\":\"d1d7b111-1dae-4a56-9f57-37a3f77020f7\",\"type\":\"DataRange1d\"}},\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"lime\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"lime\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e5842c0c-fd8d-44ac-b500-296899dff5aa\",\"type\":\"Circle\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"1bea0b8d-c53e-43a2-a732-f4648495b402\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"coral\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"coral\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4addc9c8-c892-43c6-b531-a3b8cdb3ea29\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"green\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"green\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"39b8e513-f126-410c-b9ce-65c7408372e0\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"661a558d-6ef7-4be4-be81-dea7a71a8c70\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"3e7713e2-c4e3-4fad-a332-a1102c07fff4\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"3a9ffd9d-7d1f-4680-849a-dbd2dc4439a9\",\"type\":\"PanTool\"},{\"id\":\"46eb72e4-911b-4f17-afa9-a94d42dfcbef\",\"type\":\"WheelZoomTool\"},{\"id\":\"9846262f-183d-43e6-b278-6ac49559dd69\",\"type\":\"BoxZoomTool\"},{\"id\":\"0eddfe14-cee1-4853-ac32-f0d22dc8699e\",\"type\":\"SaveTool\"},{\"id\":\"7fe42c1c-894d-46d4-9257-35a1dc36466c\",\"type\":\"ResetTool\"},{\"id\":\"1bea0b8d-c53e-43a2-a732-f4648495b402\",\"type\":\"HelpTool\"}]},\"id\":\"10a19e19-02a2-475b-8406-3c21d8da5b46\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"ad35cf0c-0e5b-4100-8fa6-00ce21b69c12\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e5842c0c-fd8d-44ac-b500-296899dff5aa\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"0abcf802-4ba5-4802-8a06-31c9673fd5de\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"61d151cc-1443-4377-b2a5-71fe0b5ff494\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"10285d43-a120-4aa9-9f24-5ac28ffa46c0\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ad8b2453-bb3f-4c0e-9cd6-8cb23e16801f\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"blue\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1b69f779-9065-4176-8deb-54c2cdb0abdf\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"J4593rkTIsCUDUsxhGIQQGvgiWITLyfA9XPV+/22KsDOhUI0SpkkwPb+UUUtCyLAUfI1srb2IMAsjYcmMhAkwJeYQkLxShbACYyhVaELIcCecX4T7CorQHUu1NZK2xzAEl3rezkJJcA0q8wp028hwCOHPgGcFyTAbSrs/S6eHsBLrn9HJBkewNjdyo7HBdC/3dePoJkGJsAkHwKV0rUhwHKjLXc0LiLAqmRzSLSVIsC6ApR+jLYVQGV13wAUaCjAD/b/MsEFBUBAJLmkaDEjwHNP5TCW4CrAGB7M52HbHcB+e9CH8pQmwNBPDBlpUArAq+PpNF1AKcDjgD4kd9MfwPD6mcByuR/AkOaDwPl7MkBXWLc+PJgdwFcM+vMtZR7AY20jIIPDIsCl4lmg06IlwJ5mH5mmVSLAxSlfQf2QKMDvUJIXPCIMwAQZg3jWmB3A67VpcSfJ8T/ob3NxezgnwKe9xZ1UdCfA59vRw1+2IsCZjBgmihUlwOp0O6szHRzAtogFaiJWIcD1/v3H12cVwDQ05Oi7cSfAp5alIjbfFMAZTI6vTJwjwHNbK9FMZCjArO2C0bOHJMBpoVdYyXUhwODVhXc7HyPAEUBGX5p3K8CM6Fca+nYmwNkKSC/BrB3AGdzKFjmjIcBB13ROtn0hwH5Jy4ld6iDAvFxARABcIcBRDCbKVYYnwA2AvFg4+SHAsyM8+x0RAEDUNYqdv5AowPV7iHyHPjLAWuDn5e0+IsAurRx4gVIewKe+cORr8CLA8TO5C3avH8BOeHC2VtMqwHAfQNDBiBBAXJhBDbfUKMCHS8616GMiwNv2qpYZtCjAyIP7q7ucIcDq8ujyvYQqwGpQAZ4hNCPAOG1J58U0IcC+prOwcBoqwGgvviKhIxzASorIfdVY5T+hlXfOz5/nPxIVKZdQHCXAWPip4xEtJsD5mNBmJdUmwBuVnUVkax3AoFeS3X46HcAnlGf2A7IjwDwplbPrJCfAKrZHkrpPJMACdhnGdbojwJ8nZpq01SXABFQsYD5eKMBYHx5mRucpwBVSAugAcijAtBXDaHFQJ8A=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"+9RvMONpEUBLkTzU7NYzwM1cU9jtCyBAYsnLPgp2HUDrrOdFMLYRQPxPeBp7IRlAFd1RLNfuGUCkcXnU1dAiQEY3lRAf2BZANX/bLjVvH8B69Xq0FTErQKjQYIqCHCNATWZ4Z/yREEBNvrLJseMdwKzuz3/PJxdAvoX5RFsZEkDyKOHFfLojQF5AQLvazsY/6ffnB0h/I0BoQss6/pkbwKW82IOVL8U/rRkVq/xn0T8k4/alYF4tQOU/R5n2aSJAs7DaJltB8j84NumM2O8RQGQV04hl8xtA/6UeJ6dIIkA7zNRpLuwcQKaxXsSL6yTAg+hpZK+MIUAmOnTitYEUQMQeoXyRGhhA+xPP4vTpG0BQ6WFyMfIbQF+o1XyAyCRAg+Klgdpb179PRJowknMgQGg3BXq1kx9AoGYTaMQcIEBjP6PuMUImwEAllOlPUBxAxFJytvsY7D9/4FSSoJ8hQDPsf/rzICNACmRKqW7kEECQZLwkFp8hQDerDt+a9RBAh9rrQ0b1FkDA82K1kT0WQDzh671qYx9AYKJhCgMdH0CAAyCWwQgjQMqa9nAxLxtAmQJg4oM9H0BpJRTqrzEbQLisLbrjyvi/9kfzTfZ4IEDOIKyfWzUXQLoAuR0DlBNAKkVXchELG0AqOGBGDmIYQON2vQnR5xNAz8JiWjGJGEDklxjt8Z0SQNtm3bfxOg5AG8w1VixE779vJHHYgmEiQNIg8BRJMh7Ar0Pb2UFeHUBCIDcT8Wnmv+lVJSAENCBAJsu9ejxlF0AJd5gNglggQFP0dd8fbjLAQ5F8OoMtIkDnUFdSKlM2QPtXUSdvoSBAz1a3y5w2DECjkmEnxO8gQNcDinQe/hpA1z1jyG1BH0BHZm/fRsggQKraRRxQTBFAEihH/G7PL8B4/Ljjz9YvwE03WkfGag1AWofsLfamE0AYQ1/QOpYeQEwcm9OiwSJAKC19lcFCFkCrE0oSXDAeQK6rfsygSxRAGqlJGpMqFkAw6NuEytQTQOcSK2noPhZA69bz6/fnHkBF1/MkYLshQLdQ6gwsAyNAERfT6vLmIkA=\",\"dtype\":\"float64\",\"shape\":[100]}}},\"id\":\"3a298aef-3e85-486c-a822-8d8ba749ea13\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"961692d3-5d9d-413b-af3a-7dd95eaa6773\",\"type\":\"Circle\"},{\"attributes\":{\"formatter\":{\"id\":\"7b86a82a-b121-4e1f-ae71-be992129c14c\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8c51cd31-a3c8-44cd-8461-e0336ba054b2\",\"type\":\"BasicTicker\"}},\"id\":\"aeff42d5-9279-484c-8e33-ad92cff0e64b\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"1\"},\"renderers\":[{\"id\":\"4a6ab629-922a-4cca-9d25-6fc2b76893f4\",\"type\":\"GlyphRenderer\"}]},\"id\":\"b1689a95-a3fc-4723-b733-838dc50d2bc9\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"383ecda6-36c1-4403-afb6-e18fe92e8731\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8c51cd31-a3c8-44cd-8461-e0336ba054b2\",\"type\":\"BasicTicker\"}},\"id\":\"f4204887-e43f-456d-86f5-0e67d500ed05\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"1c51aa9f-10a8-4361-a173-48c7c6942006\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1b69f779-9065-4176-8deb-54c2cdb0abdf\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"96b7e4be-6f1b-4a47-91db-cbd18bed4195\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"c78ed4fd-0dd2-4855-9a0b-a81bc58f6446\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"g1O/VqK7HUAAzQdBB7YeQEiMq4nKTxdAKrXQ7EVlE0DHrD4sF9v9P1bmNkmBOgVAtE2pfiu3GEAhIS9e2MEIQGY6BTBhLBhArnBelg+yAUALlCkZ5jMTQGC80Qms0A5Ab0yyjFgPD0BuSuUhut8YQHOI/u5SAPQ/airYiiRdH0CtvIFBqEIgQA7eXD62+AhAftN6XiRG9D/tLsOrXm/9PxVQMGBrIhVAL6IXiwfTFEBq3JpI+PURQDYV1NFa+RdAE0dh/pasEUClDCScXE4AQMRZP0/J2f0/3rCmi5TO9D9qzCs0zMD6P0hNh0nsOf4/MJ7fD8YrCkB/E/VYHX72PzFC238jGwFAhJaZE3blCEB/La6gxqwZQLNra4QeUwpATUFEIiwgKkAgwqowuaYFQMKYM016jCBABhuh7K4tEkBXNSEfeub9Px4yM+VpXwhA0NdDufRyFUBSWzOeI5kQQN8qC+vfeBFA/CGHNiu4/T9LHe07siEhQHiox1KVoxFAk/HFmvce7z+ClCLdgj79P2K7hbPPJBdABfJ/ZlluFkBV2+gdk+UdQGi/klJumwNAsJ262mNX3b9elrzrmGQTQNwZzCQVqBhARwTPeo0n5T/r4kQvaaEfQLaA5V0qyA5A/5d2zd/dMMBWRcf5KKICQASJmm5ClwpAUtZ/pDZMIUCG8TzA+t4aQLn71SkvnQpAykkMbBqt+z8nE0tpHtAYQOK6l4iOuQZAdIlZQRWpIkAbO3IR3zYVQC5Z2e4o4QFAOrrTv1clEkCpm0gC7bkWQD82Kp33oSBAWkiNJLcREEA10uVDE4keQNQ6SL/3PtI/IwEgbPSTEECefMD1GeoVQB98xlyIAyNAZGJ5oTrrFED0BHJHxLMUQMN+Bd/NPDHAgvGTaqr59j/IcXOv2tYVQDJD4xU9mRBAgcBX1X9mI0A0p5cskFT8P/j/d8ARKhFAMP6tw7FGHECbtIsCwV4gQPUTTxvJnhNAOUhd3c8AF0CcleXlhbXjP/5QURy5dwVAAMBH//32EkAKVYbu6/oVQDqy+bIWT/Y/B91qcSGrBkAZl9+CaWcMQBVSjPDbnhZACza5/dM6HUBoksHtBiwKQMAUA3VXJBpA+IDw3zrv4j98503eyt8dQA==\",\"dtype\":\"float64\",\"shape\":[107]},\"y\":{\"__ndarray__\":\"Klos2LLRHsA+Of2OW64gwKm1tL33TBzAvoGqlyDS7r8WwmskTLIjwA975/YWQBvAC/Ecvpk5JcCeJDvEs8AhwEmh9LObvh/ADkBpc1HfI8ByjnirW9cRwDv4GOXB8iLAvK89K2Z+IMDSh7EUJW4PwEVakWX5BCDAhjApQjMcIcBpQhBdbF8awPSz91RoYiDANPFSv11/A8C/odY1vTYgwKbYVpInQiDA5jzamt0/FsCv+BpsLRoiwDtTfJUP8x/A9HRT//yEE0AuGJMQegn+v4yI6Wn1ayDAWOxX0mNPJMDQK5LAj3G5PxS0kpbqHAnANkDjsrw9JMA5pTGODAEjwNiJnTMUQvS/yD0J7KDxHMAVfrTSJ+0UwIMNEAah5iTAF66iodrq/D+4jHYz28v0vysBd2MzbRjAggHNnxUiFcBWP66jewIjwFJcjJ3VDBrAY37SDKI8H8DBYfQ2PbkkwJUw/IasHBLAoaAcda0nHcDgcI1GFM8fwICg50Dl2fi/KG5ecO3Ixj/T8VwHwZkbwErKZzusnxTA9NYvr6CV8D/csPUchX0YwIaMlsFOvBrAsHLGb+cp+z+mpHaJxyXuP5EG8N97ShLAbJJ2oq18IMA22jhJGicZwL3C1v2P7QzAxo0RBvimC8DY44aRZrIjwBU0sFHJVRLAgbE6jbKLHsDMBxosPEwYwElNN6vHywbAeihT6t2ICMBfBozVdXEPwH/BIEYIZiLADeEl6yQoHcCqksx6Cq4SwKvMba8zWSDAhH264ZTrFsCZZdzZcbcLQAOyYiypcBnALaImv3nKIcCm/55i4RghwEY9XTkvDCHAhvXH6NPG6z+jPLVnB6ALwBt7Jx2gPDHA1rcY/bdtGcDcHH9+2YsfwJgG8++wTwPA6oH+/UNCIcBdmovSc1EkwAw2+I7zzQjAotZSnFKmMcB5h5MAQ8gXwFU/Cg1zBek/epOiTa17I8BhaWw74wcawFpUNJXIGiLAtHnREb5SI8DEXXxwfUIgwJqXC/K44QbAIOCpAYXgtb/2ijvFgbUhwHD+bqAU2CDAzBld+WtWIMCUkL4pCVIZwNvPONTfWSPAGKbBLLAmI8C8N2Z8fLwjwJ4uiR5HbR3AcF1W3DA1AcDTuWtJ1RIawA==\",\"dtype\":\"float64\",\"shape\":[107]}}},\"id\":\"ad35cf0c-0e5b-4100-8fa6-00ce21b69c12\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"P4QDaQsiJECgsT2KvyEjQPQxwRAJARhAunVjuI4A/b8MId7ikRsgQMKyZN+cwBhAA7FdZhjhIUCDfvAIi+cpQBI8DP19NiFASJqq3UbBGEBzBIFJonYhQCPJwzDkrx5AjLgj1UX8HkDizzrXibkmQE89f3yWjyhA42H/DxjXHkBaZTuUd0ElQJ7Eem1bTCdAj6+QYhbYJEDbeBHL8qMEwJT5UFOD+iJASxidQVNZAcCz5LnpNFIgQPFUAGUHryRAzAoOG9y9GUCUAnsW5JgnQAGUKOVLoQNAjAYA0+ZcGkB7Ehu1bFcoQH5V5XfYeR9AKgVS8+upFUAE5da8lVkfQM0ZBmreex5AwsqN9f4oI0AbHESKBa4iQC/Z/g3+uCVAUKIe2DfMH0AZi2ordVgXQDh3QPoRnSNAgPleTOd4H0C/dKNBsdchQHBlV0DZnh1A1uQxqct1IkBUOl8RGM3/v8XlVbrpdSBAl1hdPoIKIEC9eSOM6o8hQBrVwqX1ChxAc+0Cs3b5AkDluVAAwgYnQGfDm8rMdhpAPXNSjRDfIEAaxD4MjP4ZQFHXfyPCVhBANTbh3tVoKUDldFXbrigcQFGRzkI5Kh5AUVvzKFY0IEAzLPqA6qP3v77PkywtLxRA0UkPRQUoJ0A2/WhNU0EnQNnL/SbaFyFAq0G3o0CMJEDVT7zTZHweQAgmD1eZWSZAt9Fp4ZWjIkD8zHIYVwUgQHse8ZLOiBtAg6rc6QunJ0DHUC7nEgspQBNEZeVxhyRAUS8BPmB1J0CzNxDLqd8gQFLWis5EYiVAd8YTG9VnG0DIkdxxtgkiQJxwW1Xeyh9AC6Sfk7rnIEASt3NbndciQNfJ5rtz3CRA\",\"dtype\":\"float64\",\"shape\":[81]},\"y\":{\"__ndarray__\":\"IsTD3ju6C0CA7aP6DWkUQMI+Tuh44CBA+BddXtC7/T/ixL9WSk8qQMa9nLUQhh5A4W7YG3LWJEBtEOvaIEYRQOtubdeQXSZAg5dydtDhK0CxExXDJA4mQCJ5nwdcyR9AdUwvlrbgGkAZg02edT4VQMPXiIqI4gtABKuKP3aQFECfRV6A8SAIQFrlvoHsuAdACi5wXiPHBEA2vgka2YQXwBmV5BVJBhhAmweiQr8S9T+dmSPlEBQjQOkIe3WazQRALCyIMD5UIkC2iSHfVZINQGK+RuHhA/8/dTjKOOW6H0CssgTPW2wRQBx4HqUpIAZABDB/NLheIUDLPuhxn7AfQB03yHQm4yBAKjWWXOTGFkC8ImqQt1cZQIWZfEKtCBBA105yWMp/JkCaso2MrhMrQCBvxI2TBxRAX/lPLkvEGkCvThl/iNgIQCMOwvqkFShAXtxXieTQC0Cgk6LbMBWUPy+DJFdHASRA3t5zdaaIBkC+H8Uy8ywzwMGpPST1QipA+obC0X63E8ALywpa3BUPQODn8HSZqSFATzB7anbqE0BKya6+e1MiQMtUg0iu3xtARxUTyG84BUDheBQJEQbbP+IJ6mg0WBlANR0Q7t8SBkDv/qj96lgSwIXEX+BbpiVAV3ri0Jb4BEDQIFcD2aAQQCENo1aXKB1AIPhiK2rZE0DsCt6ZEOwkQB6EvTtkuANARQvRAL5gH0DuK/71VKYpQCNG+ZK4gCtAhW7QnSoO/j+aX47s+5oFQJW2JSz5dBVAxUYLB07+CEBd1OeUYTMIQCjA0hKiugZAB7uuOTCaI0Apa67tFKsywOtxyiHSOiFANg8intaCJEBFru0KjK4ywDQelGuKGwxA\",\"dtype\":\"float64\",\"shape\":[81]}}},\"id\":\"d651deee-ae2a-460d-be1d-b023292a3a4d\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0abcf802-4ba5-4802-8a06-31c9673fd5de\",\"type\":\"Circle\"},{\"attributes\":{\"label\":{\"value\":\"0\"},\"renderers\":[{\"id\":\"c78ed4fd-0dd2-4855-9a0b-a81bc58f6446\",\"type\":\"GlyphRenderer\"}]},\"id\":\"51ea03b1-9398-41c5-8b57-0c12c1caf274\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"cyan\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"cyan\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e34bdd34-2372-42a7-97c4-71acb03b6bca\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"3e7713e2-c4e3-4fad-a332-a1102c07fff4\",\"type\":\"BoxAnnotation\"},\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"9846262f-183d-43e6-b278-6ac49559dd69\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"383ecda6-36c1-4403-afb6-e18fe92e8731\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0381250d-3021-4a37-971f-67972b73567c\",\"type\":\"BasicTicker\"}},\"id\":\"de561971-5cfb-4f3e-a4a7-a303933ba023\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"8c51cd31-a3c8-44cd-8461-e0336ba054b2\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"UqQWKbNDMcCYJHvNB6YzwJLJt9iWPzTA1BKyllA+MMA165ZAS9AtwDnKW91avSvAzl152jpALsB8bPn/kE4wwAxGECMIaTDAKpB5EdLSMsCjJCssYTguwAHfxG5BJDLAdQX1HcfZK8D8N3MZZPUswCye8qVPJTDA6Ta4ctDXMMAYPXWQueczwDvCPvl+OzDAFNrODJOCMcCUUbldgrInwHcYOziX9jHA9f6W7Lm6MsBkDvcshFIwwANnnDvlNDPAtp9qlqc7McDzRkU/EUEUwLp0kHKnkzHAYAvF6g5jMsA8hivvbDz+v8G7qFikxzHAhATdQlKoMcBeBT3n4ZAvwEkx6u+b9jHAuDgQEE72MMCQsyWaBg8xwN9Md6Z+fi7Auxg93tBrMsBH4a07kWErwE4dLz1H/C/AxiEfQ9UkLsBQOL7ui/UywMz3Q9F7wjLACl0sRV0fL8CXnucG6wgTwCIhq+R5rTHAN+JYmWiPK8BKGRM0fqwzwK+h6ZpNsTLADWVv75O9K8AG2utMug4twDAVXd1U2TPAcO+pIbCyLcCAU2ImJckxwLMJS8tkqzDA0r9ZJT/rJsCdIAWK/uMBQLpTPOOtnSfAZFPPb/etKsArakX8mXcVwDp8OurM5BHARPlw1OO1M8Cw7Zd7n2IuwINQ4nEc8zLAEdzyNZFVMMBQVWr2i0wxwNGERBgIYDPAr5c8zAjEMcAsmrUUFkUuwO5tIuFE/THAV1HonVxWMMD0XrAQ7SQzwDkdKIgRtzLAdy+QcmcjLcBQ9U3CUbv9v2kEYFmz1S7Awt4PO0nzEMBdhS298kMzwBJ0TgQha/Q/dJkJFolYMsByDZGZargxwN7MjqUiXifAOncucYhbMsAeJRRT5U8xwJIUPnpXpy7AJTiLj189MsAPCS/M0jwowPzclKuPGBXAmdMi0akbMcArz/Br0KEwwJmacT+zMTDA0FX1210PMMBxSztNwuojwHAeImQGxQPAqcUtN65WM8DSAiqL5skrwIlorM84DS3A20XUYhm0LcCWxl3nNUQtwJ4U659sRzHAS2d3l9B5LcCFXQqtubMzwGlVM+KqITDA302jubF/MMCqsMuC3h8swJpFkm9/+TLA/pyTrAB5MMCNqULUxP4VQCJ+LIDS9BXAUL94Gym2KcCMdxR2z4ExwIVxfvcRtjPA\",\"dtype\":\"float64\",\"shape\":[111]},\"y\":{\"__ndarray__\":\"BLWU06ZVHMAG/3OT8oAQwBfwCW7g2xLA1bZ8GL7TFMALGuNAAKQEwMNaPnE2aBnAqnjYmUaF8b9sqNSX/VaKPyF8bwEIrRbAgPnfRkisg78WuET3BosVwIWMK+cGrQDAsAEGylHlFcBhGOd9n2sbwOUApFK4yhnA6sCWoEBw/b8USa22FO8RwOJ5ziKsk+C/5mhMys9H978jbMz7jiEVwDqk3w+yaRDAXozAgQFAGsBEC5Dev3cIwKvJk8OfMBDAJZjDpEKlF8CpT1bRmSABwJZntOszpd+/mQ4Bjlp0CsBH4Dr4h3Xav6Fy6IHmtwbAxb+Co1AHFMB6AX9o4WoIwOj4swBULgnAdEqtWWMyAMCU4ozfbt4ZwIhpVumwAhLAGxni5d/u17+zV2oJyQoXwKFHweXzGwPAaP/vAgsW8L+57M2iEZz5vwiqzRorqOu/j7HwP4uiFcAzcIKq3Vvnv8bhRHMn9wfA/pTOIrwUFcCAR0tTM+0EwHMGRS9sEwfAPlycMdF6FsBT9l26nIMSwCK8hcgpuQXAZjDrSd7oDMCo3tzwsV0KwDC1iQrpMSHA6C8DoKlHB8AFPVLQq2Dvvwg1vAlLURbAIkfiXKESD8AkwkQi8ykBwFNKiOw8yDFAWFjVsO9CFcAnPsww+NoRwCSoQA00MhrAmQPoZH+jFsCTJLLPZxTmv/JejjlhBhbAbvKqci58+j8n9duOUMcKwG3DnmxKxRLAHEinUkPGE8CDBc3n0TgMwK5Kk4Z7/xTA3wiAhlu48b/wlhXQAvjQv9Zpi+aizhnAQOk1wedHyD+eS1fi5fQTwM275VXIWvC/ZnOfCMVcFcBpiYN6uycdwEPLBuWkUQjAu6jVnTLvDcDajnbGFHbFv4Nip9W1mhTAc2EaEpX+CMCnBDkKHL0YwCpqHdMuWfq/PE6lnn+S97/aDQFpsQoQwMjNn/QQphPA4FLyULtl1r9Sc/2pcsgBwCaJQSjvmuI/NEbMDji3EMAGapnMRt/wvzE2Gg6uePC/XMiea/AFA8CfVee6vvPqvzXIywPpDQnAuLo3eaQ4EsCvavdhG7MBwOBNJDGqCBjAkMJJMZWZEcCSlSzCAAsZwDBY7LgEtri/FFAA8ogBGMB/v9zW2XMsQAvpLgQm8QLATC+/XX+AE8BfQEc3lNoSwJPcxpx22hXA\",\"dtype\":\"float64\",\"shape\":[111]}}},\"id\":\"ba216e52-be76-4db2-8352-ebe09293b50b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1d84d47f-908a-444d-8a45-ba8c8cf0ba79\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"yellow\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"yellow\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4b00d740-2b64-4c58-ae14-8b519c061d9e\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"da6256f6-6da5-480c-8f85-aeecc6a6c7d2\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4addc9c8-c892-43c6-b531-a3b8cdb3ea29\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5b22d030-9f3b-46c8-aa62-4805a15b2170\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"a6fa1671-46ff-4904-a75d-b3e1c7ee8798\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"7fe42c1c-894d-46d4-9257-35a1dc36466c\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"giw6GmMcAMD7Abc8MIUfQMqrbA4nvyJAwA1Sze9RH0CjHNthyXAYQG01Hkg76CFAFu6krkYoIEBxtb/timoSQNDLndAjtwbAYx3CXwdFJECBKBYKAZgjQMY2/iMMlBxAvzzpHn7XC0ARHlnaiSwjQLoc3RJtmiFACSQOM3lpIEDIYDkDz2gYQHgepIbKW/G/uDQ7oRhVEEBwJq/sC+MLQAbZRsrSax5AJDVUEhX7GkD/bplDVPoXQPhfBYM2QxRAvSnFVBpBF0DBk7LXocUcQImpJJ85tgDAmxr6MkQ/IEA7mRjSj5AfQNL7B6oqMBJAXIO+uUL8BED3KAdGWzMkwLVXkXRECxtATDtv7aDDI0BliZjmVqUYQDBZfE2HbAPAPCt1EmpsHUDF3Bg6rx/6vxj8aygu1gXAju9miKJwGkB+V9wbEUMfQLQwMUrBCyBA7PahaQBkCEAgrSo/zWf4v37+0PeGGAPAC3qoqIZlHEDKxkTbfSIaQK59ZrFx8h1AOCeh+2moE0Df2xGdPz4WQEQ7Gmjt8xRALUFUqYhC/j9DbaLNcvQBwEUODmjAq/i/EHA47M9WGkAR0Ic/AvEdwPvbpJsAoilAqHQWyE/wEEA0bqaRWrwiQPKbkr7JgBxA+gw7LXqOEkCTNQkme8P3v7BsnlwDvBRAouWLP3yhBEBKjj6mCpAOQNNV+5kxNiTAKQaL1kXmEUAAnBe/hcoUQJmxVbZhRAPAq7Zs5v6KGkA4M+2GRGwIQG9V7lOG3xZA/gRw1GBUIkA1r4xOJIYaQBkGzVXWbR5AjFKtaz8AF0BkVBQlFJsiQGozVARkZhxA+yVhyr3WHEBaKxGEYnUdQHVEEScwLSdAARuRT62c/r+pGON3O6YPQMotTttW3A1ANLaIqfqTI8BEzGQsJp4HQFO7nyNUrAXAL/zutUp++7/hp6dirdUAwBx+kxZJJRlA\",\"dtype\":\"float64\",\"shape\":[90]},\"y\":{\"__ndarray__\":\"+4ASwa+lFsB9u4DrIlEwwIPUWDO9yzLAYTC4KCJvLsABTZTKtE4xwFgDxqaQsjDAU26fEYHQLMA5sfNdyRstwGzh4lc2PRDAGtIoKv0CL8CijiLsCwsuwJBwaTHACTDAkQz93ZnlL8Cm5WR676UvwCUYfkPmgC/ALspMV1c/McALOjaVy3YywKDQp/xbngjAp9SDrPYjMcCWEDtQ4gExwGJNQxtJjS/AcynB0fipLsD3ZkJbnV8wwBXF/Haf0zHA8FxqXPv6LsAGXHCAya8zwEgPeJSwiQzAaLX2uQBdMcB3HVk/mRMwwDe35KCkdTLAYv5THmScMMCeP8WgVz4sQJRx6xAdny/AfKk77elYLsDdNZ+PXKIywH25SQxbFRDAA0JuPs3NM8B9EtCmJ2YUwDILkZxjPRfAm410raFwLcB9ldjkbQswwPvcHBo2STPAk6wLz/69McAloYQMFxMQwNUHwHP5xA7APa8G0X6tMcBi8UjUBLguwN8HxVVevDDA/85fNMwPMsBdUUXQrzouwC9WLLmovTDA2cjnaiSYKkDs5t4TwZwCwKMTdoUdIAHAHcnIeFAlLcAg27MTiB/iv11YKHCnzxBACVcddB6bLsB5u+IXMmMwwGFnn54vszPAwjbTWnE/LsAfSWBU/54JwNokC0gFqjDACUB3+GFmL8BrZ6XUjVgwwI6XfrWoZSxAtgZ0IlhQMsAVcbAvmbIxwCHmWdY8WBHAdm1+QIkkMcDMCjI4CP8wwB9CWVuRCS7AYyFV428vLsCLBC9RzCcwwC6wVyxuYi7AudT3WwPbMcDcVXraAWouwENAeY80cjHA0syujL1yMcDNNlI/lD4wwDtTXKNzPRdAsC4dwtEjGMCzMZ1qweIvwIi6hfUvFjDARcM9MQuBAMD1iw5xpocvwKrFSLyRORfAm/TJq2gdAsCvh2Fw7TMDwMI5VXbVfjDA\",\"dtype\":\"float64\",\"shape\":[90]}}},\"id\":\"5705cbda-a125-4b95-8dcc-a7a4e409bb0a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fcf23350-cea8-40c0-9b8d-e664d26c8000\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"y\",\"x\"],\"data\":{\"x\":{\"__ndarray__\":\"ZoLcsWsWKUBkVDDh5/ksQCKF5JIabS9AVuw2OfA5HUBicaEM1+wtQIL0IpuWrxFAYtEVAYoSGsDbyGI3KoMvQHtCyJPJ1TBAfvWuJRJXLkAJo5h0Nz8xQDm5Ij2IuytASdUdjQ1LLkCRKDJg7AEtQFI96kvYeS5AAbbsWLZBMECq+b5qr+YqQKNMMte7JSpAX/aHFuI4KkD0KFQfzwUvQKr0d2DULTFAjqcHneAOMUBfEwA1S2AxQOczlhnR3zFA65uQfz8RKkCfurlgTrnyvzvjJfUqAjBAZcHGmmgvMUAmHS+fCSMwQDzuKDGLoTBAqp53DdQ/MkDFf38DbyAwQFgbg5As2ylArzIE76TPMEDV17vOR98sQNliOzXh3QzAJwiWJTB4LkBH9b2cesssQIvSX65Jei1Am6IP9bcKMEC8NhK3bAYyQDv97i6SbTJAXXtwEafFKUCjuOhuFdcuQO7qUhjEsytAK5obdkeUK0AAEgUrAaAqQJHoTmAaaSdAWwpivC6/K0CfAUeMafcvQJ92IUySOzFAgyQsie5zK0CmCr6Lc7AuQBmJZeochCpA1Y6GI82BKUATul5bgkgsQDtSoxMhYhrAitrtWgr8JEASf7fOQS8yQEh6+P6dFgrAU6jBqjE/LEDrDspIw00tQDkffkT5TzJAermvrUmPFECNfoNaXuUwQIQF2gDWNzBAdI3JNXQ+LUDaID0zuTQrQLeFjKesiS5AjxADTIPGIkAG2R+YekgnQHoV68jHlixA//W9gnkoGEAhmytsadAuQI/lv+DS0SdAoZI0a/+DK0B6kMmAWjgrQKtI2XvBrCZAMvmrwoSSLED8qd9JznUrQBM3LgbiiSlA78Y82DwBMECkYmcTHHEpQKO83CmMGTJAXwTPeA0aGUDdt5sb0K0eQNyIPCvhHzJAA4Uzq2rcLkCBUO8pEF0wQNUcbqov6i5AWg47EjeFHUB7AymAUx0wQF1wFtkF5CZAWQH0ZmeqKkDdab5TYUAuQJ1xUAk6BjFA\",\"dtype\":\"float64\",\"shape\":[96]},\"y\":{\"__ndarray__\":\"0EuoQSsWKUDO9Th/l4EsQMdmjVl4dyFAs/MKkN2UF0AyOG3C3i0sQP5P/58eaiRAHvXVY0drCEDuzpOW5hUeQNy+W/xwXyBARPxP+5qLKkBGXWIxHNUkQCk/T3RJciNA5scEYl9xLUAHCFk/RpUpQPKuMMsZLSZA2fOGnca+IUAYH8ArWrgnQIjveoO1tSVAM2l5d6UJIkBumCPUon8lQDoBCvUXBhxAHvrl+1SrG0AmgDGSGd0dQMcd78vDlSBAV2uNjjbHJ0DFPzpPooUGwOKT1O8NwCdAdmmGRcZ7EUAwpFpnImIWQM5DBrtk8yFApN8ZuY+/GECTodKVS8IUQPH2qPwAvypAbsUttt2KIEDrbBRjetkLQNj+Ir01LhHACepLgOdaI0ACB2qEKOwsQHwNM7POEClA/gyMOZmQIUDx/3y5AWwXQHMgqa1d0iFA8F5ztx8nK0Do2Uy0CbAeQBUXKJD+mhtAgeIY2IlcJEDQNrejlekgQDfSGS8WlyJAzVZZvA4MJEAtJ91vriwgQBjya5UvICRAj31/ZnvTJEBYMGi0SNMoQBp4h5aU0yBA7IlDZiHpKEDfZHgtISApQCW8eXRrUwlA6RuGCK5qKUCJECvWxVEbQOnObB/efSzA6WoKCUfULEDbJA1sIyknQIZCJNKysSFA9EUNBxuYH0DFypDRvjceQI+Fom66BSBAEq/xPgskJkBVHaclAhgbQE9udUB3KSlAm/X92vb9JkBdNgMvJqEiQH0Auj/t6ChAKLXLAAlcHUDU6jk0e/YoQM7M2QF10ylAnhdKA3pgKEBpHWDgXJMoQGUnKLmd2ilA6ammH+OcKUB3R8QkEK8nQNMoo8pOESxAG0ftzfZHHEDmcIv9EMUqQLQBWAgVPBNAsEB79PMCLEB9AnggpcgqwOID7oxaWB9A5gxItGwcIUAjNL/lbgMiQMn3TmOWwiZApKKvQZWlE0DacjrVspwnQHa6/5BbmwNAL+motw6kJkDNPBVi2KskQArPJV1V5BlA\",\"dtype\":\"float64\",\"shape\":[96]}}},\"id\":\"da6256f6-6da5-480c-8f85-aeecc6a6c7d2\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":{\"id\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0381250d-3021-4a37-971f-67972b73567c\",\"type\":\"BasicTicker\"}},\"id\":\"582554cc-769c-4e47-9cf2-1baca126df0e\",\"type\":\"Grid\"},{\"attributes\":{\"label\":{\"value\":\"2\"},\"renderers\":[{\"id\":\"b2e97d19-5b4d-4d3c-8df5-a5f760eda438\",\"type\":\"GlyphRenderer\"}]},\"id\":\"479fa1de-d9b5-4c46-a324-a0dd27bc192e\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"black\"},\"line_alpha\":{\"value\":0.4},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f331f988-abb4-4bac-baaa-3d326ad1e8af\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null},\"id\":\"d1d7b111-1dae-4a56-9f57-37a3f77020f7\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"75f57b6c-48b5-4d3c-9b7b-bc20eecabb2e\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"purple\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"purple\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fb675052-09f3-4302-aab8-cf62d3f45bc5\",\"type\":\"Circle\"}],\"root_ids\":[\"b865903c-b5ce-41ea-b059-2a4b1569d610\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.5\"}};\n",
       "            var render_items = [{\"docid\":\"0a107901-21f4-414c-8b60-0314827c77c9\",\"elementid\":\"e90df1a2-e577-49fb-89bb-6e083232c9ec\",\"modelid\":\"b865903c-b5ce-41ea-b059-2a4b1569d610\"}];\n",
       "            \n",
       "            Bokeh.embed.embed_items(docs_json, render_items);\n",
       "          };\n",
       "          if (document.readyState != \"loading\") fn();\n",
       "          else document.addEventListener(\"DOMContentLoaded\", fn);\n",
       "        })();\n",
       "      },\n",
       "      function(Bokeh) {\n",
       "      }\n",
       "    ];\n",
       "  \n",
       "    function run_inline_js() {\n",
       "      \n",
       "      if ((window.Bokeh !== undefined) || (force === true)) {\n",
       "        for (var i = 0; i < inline_js.length; i++) {\n",
       "          inline_js[i](window.Bokeh);\n",
       "        }if (force === true) {\n",
       "          display_loaded();\n",
       "        }} else if (Date.now() < window._bokeh_timeout) {\n",
       "        setTimeout(run_inline_js, 100);\n",
       "      } else if (!window._bokeh_failed_load) {\n",
       "        console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "        window._bokeh_failed_load = true;\n",
       "      } else if (force !== true) {\n",
       "        var cell = $(document.getElementById(\"e90df1a2-e577-49fb-89bb-6e083232c9ec\")).parents('.cell').data().cell;\n",
       "        cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "      }\n",
       "  \n",
       "    }\n",
       "  \n",
       "    if (window._bokeh_is_loading === 0) {\n",
       "      console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "      run_inline_js();\n",
       "    } else {\n",
       "      load_libs(js_urls, function() {\n",
       "        console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "        run_inline_js();\n",
       "      });\n",
       "    }\n",
       "  }(this));\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "p = figure(plot_width=600, plot_height=600)\n",
    "\n",
    "colors = [x for x in 'blue-green-red-cyan-magenta-yellow-black-purple-coral-lime'.split('-')]\n",
    "colors_map = colors_map[:1000]\n",
    "for cl in range(nb_classes):\n",
    "    indices = np.where(colors_map==cl)\n",
    "    p.circle(X_tsne[indices, 0].ravel(), X_tsne[indices, 1].ravel(), size=7, \n",
    "             color=colors[cl], alpha=0.4, legend=str(cl))\n",
    "\n",
    "# show the results\n",
    "p.legend.location = 'bottom_right'\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Note: We used `default` TSNE parameters. Better results can be achieved by tuning TSNE Hyper-parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 1: \n",
    "\n",
    "### Try with a different algorithm to create the manifold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.manifold import MDS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## Your code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 2: \n",
    "\n",
    "### Try extracting the Hidden features of the First and the Last layer of the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## Your code here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## Try using the `get_activations` function relying on keras backend\n",
    "def get_activations(model, layer, X_batch):\n",
    "    activations_f = K.function([model.layers[0].input, K.learning_phase()], [layer.output,])\n",
    "    activations = activations_f((X_batch, False))\n",
    "    return activations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
